#ifndef MINER_WIFE_STATES_HPP
#define MINER_WIFE_STATES_HPP

#include <SmegTools/Pattern/Singleton.hpp>

#include <SmegCore/Game/State.hpp>
#include <SmegCore/Game/MessageInfo.hpp>

#include "../Entity/MinerWife.hpp"

//--------------------------------------------------------
class MinerWifeGlobalState : 
    public smeg::tools::Singleton< MinerWifeGlobalState >,
    public smeg::core::State< MinerWife > {
        
    DECLARE_SINGLETON_EMPTY_CTOR_DTOR( MinerWifeGlobalState )

public:
    virtual void    OnEnter( MinerWife* _pEntity );
    virtual void    OnUpdate( MinerWife* _pEntity );
    virtual void    OnExit( MinerWife* _pEntity );

    virtual bool    HandleMessage( MinerWife* _pEntity, const smeg::core::MessageInfo& _msg );
};

//--------------------------------------------------------
class DoHouseWork : 
    public smeg::tools::Singleton< DoHouseWork >,
    public smeg::core::State< MinerWife > {
        
    DECLARE_SINGLETON_EMPTY_CTOR_DTOR( DoHouseWork )

public:
    virtual void    OnEnter( MinerWife* _pEntity );
    virtual void    OnUpdate( MinerWife* _pEntity );
    virtual void    OnExit( MinerWife* _pEntity );
};

//--------------------------------------------------------
class VisitBathroom : 
    public smeg::tools::Singleton< VisitBathroom >,
    public smeg::core::State< MinerWife > {
        
    DECLARE_SINGLETON_EMPTY_CTOR_DTOR( VisitBathroom )

public:
    virtual void    OnEnter( MinerWife* _pEntity );
    virtual void    OnUpdate( MinerWife* _pEntity );
    virtual void    OnExit( MinerWife* _pEntity );
};

//--------------------------------------------------------
class CookStew : 
    public smeg::tools::Singleton< CookStew >,
    public smeg::core::State< MinerWife > {
        
    DECLARE_SINGLETON_EMPTY_CTOR_DTOR( CookStew )

public:
    virtual void    OnEnter( MinerWife* _pEntity );
    virtual void    OnUpdate( MinerWife* _pEntity );
    virtual void    OnExit( MinerWife* _pEntity );
};

#endif // MINER_WIFE_STATES_HPP